Today, communication devices, such as telephones, are becoming increasingly complex. As more and more features are added, the complexity increases exponentially. As a result, it has become increasingly more difficult to continually support additional features. Even simple changes can cause long delays and difficulty in locating problems. The more complicated the software in the communication devices, the longer and more complex the development and testing process becomes. This results in increased costs and lower quality software.